package com.testing.login;

import com.sun.org.apache.xerces.internal.impl.xpath.regex.Match;
import com.testing.mysql.MysqlUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@WebServlet(name = "LoginMock")
public class LoginMock extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //后端处理的时候，请求和返回编码都设置为utf-8
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        //        设置返回头content-type的格式,以及编码为utf-8
        response.setContentType("text/html;charset=utf-8");
        //login功能
        //从请求的参数中获取user和pwd
        String loginName = request.getParameter("user");
        String password = request.getParameter("pwd");
        System.out.println("请求用户名是" + loginName + "请求密码是" + password);

//        System.out.println("------------------调试session-------------------------");

        //获取session信息
        HttpSession session = request.getSession();
        //获取本次会话的sessionId，相当于绑定房间号
        String sessionId=session.getId();
        System.out.println("sessionId是："+sessionId);
        //设置session的生命周期
        session.setMaxInactiveInterval(120);

//        //获取session中的loginUser参数，如果不为空，说明已经登录过了。
//        if(session.getAttribute("loginUser")!=null){
//            System.out.println("已经有用户登录过了");
//        }
//
//        System.out.println("-------------------------调试cookie-----------------------------");
//        //在服务端获取请求时带上的Cookie信息
//        Cookie[] cookies = request.getCookies();
//        if(cookies!=null&&cookies.length>0) {
//            for (Cookie cookie : cookies) {
//                System.out.println("cookie的键值对信息是" + cookie.getName() + ":" + cookie.getValue() + "  生命周期是：" + cookie.getMaxAge());
//                if(cookie.getValue().equals(sessionId)){
//                    System.out.println("cookie中的sessionid是相同有效的，重复登录了");
//                }
//            }
//        }

        MysqlUtils roymysql = new MysqlUtils();
        roymysql.createConnection();
        String result = "{";

        //判断是否已经有用户登录了
        //如果session中没有loginUser的记录，则说明没有登录，执行登录操作
        if(session.getAttribute("loginUser")==null) {
            //完成特殊字符的校验
            //除了\\w和-以外的算作特殊字符
            Pattern specialWord = Pattern.compile("[^\\w-]");
            //为loginName和password参数建立matcher
            Matcher userMatcher = specialWord.matcher(loginName);
            Matcher pwdMatcher = specialWord.matcher(password);
            //都找不到特殊字符，才进行下一步
            if (!userMatcher.find() && !pwdMatcher.find()) {
                if (roymysql.proLogin(loginName, password)) {
                    result += "\"msg\":\"恭喜Post登录成功\",\"code\":\"0\"}";
                    //前台登记用户信息，记录用户名放在loginUser值里面。
                    session.setAttribute("loginUser", loginName);
                    //发放Cookie，创建cookie，键为username，值为用户名
                    Cookie uname = new Cookie("username", loginName);
                    //设置生命周期，单位为秒
                    uname.setMaxAge(120);
                    //返回cookie
                    response.addCookie(uname);
                    //将JSESSIONID作为一个cookie返回，重置它的生命周期，相当于给房卡绑上房间号，设置入住时间
                    Cookie sessionCookie = new Cookie("JSESSIONID", sessionId);
                    sessionCookie.setMaxAge(120);
                    response.addCookie(sessionCookie);
                } else {
                    result += "\"msg\":\"不好意思post用户密码错误\",\"code\":\"1\"}";
                }
            } else {
                result += "\"msg\":\"用户名密码不能包含特殊字符\",\"code\":\"2\"}";
            }
        }
        //如果session中获取到了loginUser，说明已经登录了，返回结果
        else{
            result += "\"msg\":\"已经是登录状态了，不允许再次登录\",\"code\":\"3\"}";
        }
        response.getWriter().append(result);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //后端处理的时候，请求和返回编码都设置为utf-8
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        //        设置返回头content-type的格式,以及编码为utf-8
        response.setContentType("text/html;charset=utf-8");
        String result = "{\"msg\":\"不支持使用get方法登录\",\"code\":\"1\"}";
        response.getWriter().append(result);
    }
}
